home *** CD-ROM | disk | FTP | other *** search
- ; value to initialize all counters (approx. timer based on Fire & Ice SFX timing)
-
- CIA_COUNTER_INIT = $50
-
- ; init-values of cia-interrupts
-
- CIAA_INT_VAL=$F
- CIAB_INT_VAL=$3
-
-
- **************************************************************************
- * RESOURCE FUNCTIONS *
- **************************************************************************
-
- OPENRES move.l a2,-(a7)
-
- lea _restable,a2
- .next move.l (a2)+,a0
- move.l a0,d0
- beq .err
- bsr _strcmp
- beq.b .found
- addq.l #4,a2
- bra.b .next
-
- .found move.l (a2),a0
- jsr (a0) ;init
-
- move.l (a7)+,a2
- rts
-
- .err pea _LVOOpenResource
- pea _execname
- bra _emufail
-
- **************************************************************************
- * DISK.RESOURCE *
- **************************************************************************
-
- DISKINIT move.l _diskbase,d0
- beq .init
- rts
-
- .init
- move.l #-_LVOReadUnitID,D0
- move.l #5*4,d1
- lea _diskname,a0
- bsr _InitStruct
- move.l d0,_diskbase
- move.l d0,a0
-
- ; patches
-
- patch _LVOGetUnit(a0),GETUNIT
- patch _LVOGiveUnit(a0),MYRTS
-
- ; clears interrupt structure
-
- clr.l (a0)+
- clr.l (a0)+
- clr.l (a0)+
- clr.l (a0)+
- clr.l (a0)
-
-
- rts
-
- GETUNIT:
- moveq.l #-1,d0 ; not exactly the thing to do but...
- rts
-
- **************************************************************************
- * MISC.RESOURCE *
- **************************************************************************
-
- MISCINIT move.l _miscbase,d0
- beq .init
- rts
-
- .init
- move.l #-_LVOFreeMiscResource,D0
- move.l #4,d1
- lea _miscname,a0
- bsr _InitStruct
- move.l d0,_miscbase
- move.l d0,a0
-
- ; patches
-
- patch _LVOAllocMiscResource(a0),MYRTZ
- patch _LVOFreeMiscResource(a0),MYRTS
-
- rts
-
-
- **************************************************************************
- * CIAA.RESOURCE *
- **************************************************************************
-
- CIAAINIT move.l _ciaabase,d0
- beq .init
- rts
-
- .init move.l #-_LVOSetICR,d0
- move.l #44,d1
- lea _ciaaname(pc),a0
- bsr _InitStruct
- move.l d0,a0
- move.l d0,_ciaabase
-
- patch _LVOAddICRVector(a0),CIAAADDICRV
- patch _LVORemICRVector(a0),CIAAREMICRV
- patch _LVOAbleICR(a0),_ABLEICR
- patch _LVOSetICR(a0),_SETICR
-
- move.l #$BFE001,34(a0) ; cia base
- clr.l 40(A0) ; JOTD v1.15
- move.b #CIAA_INT_VAL,41(A0)
- move.w #INTF_PORTS,38(A0)
-
- clr.l (a0)+
- clr.l (a0)+
- clr.l (a0)+
- move.l #INTSERVNODE_SP,(a0)+
- clr.l (a0)
-
- MOVE.B #CIA_COUNTER_INIT,$BFE701 ; initializes CIA-B timer TBHI
- MOVE.B #CIA_COUNTER_INIT,$BFE501 ; initializes CIA-B timer TAHI
-
- rts
-
- CIAAADDICRV move.l #$80,d1
- bset d0,d1
- move.b d1,$bfed01
- bra.s ADDICRV
-
- CIABADDICRV
- move.l #$80,d1
- bset d0,d1
- move.b d1,$bfdd00
-
-
- ADDICRV lsl.w #2,d0
- move.l (a6,d0.w),d1
- bne .1
- move.l a1,(a6,d0.w)
- .1 move.l d1,d0
- rts
- CIAAREMICRV moveq.l #0,d1
- bset d0,d1
- move.b d1,$bfed01
- bra.s REMICRV
-
- CIABREMICRV moveq.l #0,d1
- bset d0,d1
- move.b d1,$bfdd00
-
- REMICRV lsl.w #2,d0
- cmp.l (a6,d0.w),a1
- bne .1
- clr.l (a6,d0.w)
- .1 rts
-
-
- INT_CIAB move.l _ciabbase,a6
- MOVE.B $BFDD00,D0
- bra.s INT_CIA
-
-
- INT_CIAA move.l _ciaabase,a6
- MOVE.B $BFED01,D0
- INT_CIA
- bclr #7,42(A6) ;Harry: generate additional
- beq.s .chk ;interrupt evoked by
- or.b 42(A6),d0 ;SetICR
-
- .chk Bclr #0,D0
- BNE.S .ta
- Bclr #1,D0
- BNE.S .tb
- Bclr #2,D0
- BNE.S .alarm
- Bclr #3,D0
- BNE.S .sp
- Bclr #4,D0
- BNE.S .flag
- RTS
-
- .ta MOVE.L (A6),A0
- BRA.S .IN
- .tb MOVE.L (4,A6),A0
- BRA.S .IN
- .alarm MOVE.L (8,A6),A0
- BRA.S .IN
- .sp MOVE.L (12,A6),A0
- BRA.S .IN
- .flag MOVE.L (16,A6),A0
-
- .IN move.l a0,d1
- beq .chk
- MOVE.L (IS_DATA,A0),A1
- MOVE.L (IS_CODE,A0),A0
- movem.l d0/a6,-(a7)
- Jsr (A0)
- movem.l (a7)+,d0/a6
- bra .chk
-
- ; SetICR, added by JOTD
- ; < A6: base (A or B)
- ; < D0: new mask
- ; > D0: old mask
-
- _SETICR
- btst #7,d0 ;ignore deleted int-requests
- beq.s .1
- MOVE #$4000,$DFF09A
-
- move.b d0,42(A6) ;set additional int-request (harry)
-
- move.l D0,A1 ; save new ICR value
-
- move.b 41(A6),D1 ; save old ICR
-
- MOVEA.L 34(A6),A0 ; cia base
- MOVE.B $D00(A0),D0 ; ICR
- BCLR #7,D0 ; remove bit 7
- OR.B D0,41(A6) ; ICR updated in lib memory
- move.l A1,D0 ; restore D0
-
- move.b D0,$D00(A0) ; sets hardware ICR
- exg D1,D0 ; D1 in D0 (old value)
-
- MOVE #$C000,$DFF09A
- .1:
- rts
-
-
- ; harry's version is not system-accurate, but with the system ripped (above)
- ; version, Fire & Ice music is still slow!!! I added the move.b D0,42(a6)
- ; to the original routine and it works
- ; harry's version crashes on some games whereas system ripped version works.
-
- IFD HARRYVER
- _SETICR
- btst #7,d0 ;ignore deleted int-requests
- beq.s .1
- move.b d0,42(A6) ;set additional int-request
- move.w 38(A6),d1
- or.w #$8000,d1
- move.w d1,$dff09c
- .1
- MOVEQ.L #0,D0 ;returncode: no int-requests
- ;waiting for evoke
- RTS
- ENDC
-
- _ABLEICR:
- MOVE #$4000,$DFF09A
-
- ; partly set icr code
-
- MOVEA.L 34(A6),A0 ; cia base
- MOVE.B $D00(A0),D1 ; ICR
- BCLR #7,D1 ; remove bit 7
- OR.B D1,41(A6) ; add to already exising bits
-
- MOVEQ #0,D1 ;20: 7200
- MOVE.B 41(A6),D1 ;22: 122E0029
- OR.B 43(A6),D1 ;26: offset 132 originally
- TST.B D0 ;2A: 4A00
- BEQ.S .LAB_0001 ;2C: 6716
- BCLR #7,D0 ;2E: 08800007
- BNE.S .LAB_0000 ;32: 660C
- NOT.B D0 ;34: 4600
- AND.B D0,41(A6) ;36: C12E0029
- AND.B D0,43(A6) ;3A: offset 132 originally
- BRA.S .LAB_0001 ;3E: 6004
- .LAB_0000:
- OR.B D0,41(A6) ;40: 812E0029
- .LAB_0001:
- MOVE.B 40(A6),D0 ;44: 102E0028
- AND.B 41(A6),D0 ;48: C02E0029
- BEQ.S .LAB_0002 ;4C: 670E
- MOVE 38(A6),D0 ;4E: 302E0026
- OR #$8000,D0 ;52: 807C8000
- MOVE D0,$DFF09C
- .LAB_0002:
-
- MOVE #$C000,$DFF09A
- .LAB_0003:
- MOVE.L D1,D0 ;6E: 2001
- RTS ;70: 4E75
-
-
-
- INTSERVNODE_CIAA
- dc.l 0 ;LN_SUCC
- dc.l 0 ;LN_PRED
- dc.b NT_INTERRUPT ;LN_TYPE
- dc.b 120 ;LN_PRI
- dc.l _ciaaname ;LN_NAME
- dc.l 0 ;IS_DATA
- dc.l INT_CIAA ;IS_CODE
-
- INTSERVNODE_CIAB
- dc.l 0 ;LN_SUCC
- dc.l 0 ;LN_PRED
- dc.b NT_INTERRUPT ;LN_TYPE
- dc.b 120 ;LN_PRI
- dc.l _ciabname ;LN_NAME
- dc.l 0 ;IS_DATA
- dc.l INT_CIAB ;IS_CODE
-